<?php

namespace app\wechat\controller;

use app\common\model\UserIntegral;
use think\facade\Cache;
use think\facade\Db;

/**
 * 原生支付（扫码支付）及公众号支付的异步回调通知
 * 说明：需要在native.php或者jsapi.php中的填写回调地址。例如：http://www.xxx.com/wx/notify.php
 * 付款成功后，微信服务器会将付款结果通知到该页面
 */
class Pay
{

    public function notify()
    {
        $testxml = file_get_contents("php://input");
        $jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
        $result = json_decode($jsonxml, true); //转成数组，
        if ($result) {
            //如果成功返回了
            //            $out_trade_no = $result['out_trade_no'];
            if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
                //完成你的逻辑

                //例如连接数据库，获取付款金额$result['cash_fee']，获取订单号$result['out_trade_no']，修改数据库中的订单状态等;
                $order = \think\facade\Db::name('vip_order')
                    ->where('out_trade_no', $result['out_trade_no'])
                    ->find();
                if ($order['status'] !== 0) {
                    return show(0, '订单状态有误');
                }
                    Db::startTrans();
                    try {
                        //先去修改订单状态
                        \think\facade\Db::name('vip_order')
                            ->where('out_trade_no', $result['out_trade_no'])
                            ->update(['status' => 1, 'update_time' => time(), 'pay_time' => time(),'type'=>2]);
                        //增加vip记录表
                        if ($order['goods_id']==1){
                            $num=30;
                        }elseif($order['goods_id']==2){
                            $num=90;
                        }elseif($order['goods_id']==3){
                            $num=365;
                        }else{
                            // 获取2099年12月31号的日期
                            $num=99999;
                        }
                        \think\facade\Db::name('user_vip_record')
                            ->insert(['type'=>3,'day'=>$num,'create_time'=>time(),'user_id'=>$order['user_id']]);
                        //修改用户表
                        $user=\think\facade\Db::name('user')
                            ->where('id',$order['user_id'])
                            ->find();
                        if ($user['is_vip']==1){
                            if ($num==99999){
                                $vip_end_time=strtotime('2099-12-31');
                            }else{
                                $vip_end_time=$num*86400+time();
                            }
                        }else{
                            if ($num==99999){
                                $vip_end_time=strtotime('2099-12-31');
                            }else{
                                $vip_end_time=$num*86400+$user['vip_end_time'];
                            }
                        }
                        \think\facade\Db::name('user')
                            ->where('id',$order['user_id'])
                            ->update(['is_vip'=>2,'vip_end_time'=>$vip_end_time]);
                        //增加商品销量
                        \think\facade\Db::name('vip_goods')
                            ->where('id',$order['goods_id'])
                            ->inc('sales')
                            ->update();
                        Db::commit();
                        $return = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA]></return_msg></xml>";
                        ob_clean();
                        echo $return;
                        exit;
                    } catch (\Exception $e) {
                        Db::rollback();
                    }

            }
        }
    }
    public function health_notify()
    {
        $testxml = file_get_contents("php://input");
        $jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));
        $result = json_decode($jsonxml, true); //转成数组，
        if ($result) {
            //如果成功返回了
            //            $out_trade_no = $result['out_trade_no'];
            if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
                //完成你的逻辑

                //例如连接数据库，获取付款金额$result['cash_fee']，获取订单号$result['out_trade_no']，修改数据库中的订单状态等;
                $order = \think\facade\Db::name('health_order')
                    ->where('out_trade_no', $result['out_trade_no'])
                    ->find();
                if ($order['status'] !== 0) {
                    return show(0, '订单状态有误');
                }
                Db::startTrans();
                try {
                    //先去修改订单状态
                    \think\facade\Db::name('health_order')
                        ->where('out_trade_no', $result['out_trade_no'])
                        ->update(['status' => 1, 'update_time' => time(), 'pay_time' => time(),'type'=>2]);
                    //修改用户表
                    $user=\think\facade\Db::name('user_plan')
                        ->where('id',$order['user_id'])
                        ->update(['type'=>2,'pay_time'=>time()]);
                    Db::commit();
                    $return = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA]></return_msg></xml>";
                    ob_clean();
                    echo $return;
                    exit;
                } catch (\Exception $e) {
                    Db::rollback();
                }

            }
        }
    }
}
